import logging
from logging.handlers import RotatingFileHandler
import os
from datetime import datetime

# ==========================
# 日志配置（按天生成文件）
# ==========================
LOG_DIR = "../logs"  # 日志目录
os.makedirs(LOG_DIR, exist_ok=True)

# 当前日期，用于文件名
current_date_str = datetime.now().strftime("%Y-%m-%d")
LOG_FILE_NAME = f"{current_date_str}_app.log"  # 例如：2025-09-10_app.log
LOG_FILE = os.path.join(LOG_DIR, LOG_FILE_NAME)

# ==========================
# 创建全局 logger
# ==========================
logger = logging.getLogger("my_web_service")
logger.setLevel(logging.DEBUG)

# 控制台 handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)

# 文件 handler（滚动日志，按文件大小）
file_handler = RotatingFileHandler(
    LOG_FILE, maxBytes=5*1024*1024, backupCount=3, encoding="utf-8"
)
file_handler.setLevel(logging.DEBUG)

# 日志格式
formatter = logging.Formatter(
    fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S"
)
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

logger.addHandler(console_handler)
logger.addHandler(file_handler)

# ==========================
# 可选：动态修改日志路径函数
# ==========================
def set_log_path(log_dir: str, log_file_prefix: str = "app"):
    """
    动态修改日志路径和文件名，按当天日期命名
    """
    global logger, file_handler
    # 移除旧的 file_handler
    if file_handler in logger.handlers:
        logger.removeHandler(file_handler)

    os.makedirs(log_dir, exist_ok=True)
    current_date_str = datetime.now().strftime("%Y-%m-%d")
    new_log_file = os.path.join(log_dir, f"{current_date_str}_{log_file_prefix}.log")

    new_file_handler = RotatingFileHandler(
        new_log_file, maxBytes=5*1024*1024, backupCount=3, encoding="utf-8"
    )
    new_file_handler.setLevel(logging.DEBUG)
    new_file_handler.setFormatter(formatter)

    logger.addHandler(new_file_handler)
    file_handler = new_file_handler
